/*! \file
 * \brief Empty.
 * \author Ivo Wingelaar
 * \date 2011
 * \version 0.1.0
 * \copyright GNU Lesser General Public License v3
 */

#include "MythRandom.hpp"
#include "MythRandom_AlgorithmStub_C.hpp"
#include "MythRandom_AlgorithmMotherOfAll_C.hpp"
#include "MythRandom_AlgorithmMersenneTwister_C.hpp"
#include "MythRandom_AlgorithmSFMT_C.hpp"
#include "MythRandom_InputRandom_C.hpp"

namespace Myth
{
namespace Random
{

_MYTH_RANDOM_API_ Algorithm* _MYTH_CALL_CONV_ create_random_algorithm(E_RANDOM_ALGORITHM algo, int32_t seed)
{
    switch(algo)
    {
        case ERA_MOTHER_OF_ALL:
            return new AlgorithmMotherOfAll_C(seed);
        case ERA_MERSENNE_TWISTER_19937:
            return new AlgorithmMersenneTwister19937_C(seed);
        case ERA_MERSENNE_TWISTER_11213A:
            return new AlgorithmMersenneTwister11213A_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_607:
            return new AlgorithmSFMT607_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_1279:
            return new AlgorithmSFMT1279_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_2281:
            return new AlgorithmSFMT2281_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_4253:
            return new AlgorithmSFMT4253_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_11213:
            return new AlgorithmSFMT11213_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_19937:
            return new AlgorithmSFMT19937_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_44497:
            return new AlgorithmSFMT44497_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_607_MOA:
            return new AlgorithmSFMT607_MOA_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_1279_MOA:
            return new AlgorithmSFMT1279_MOA_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_2281_MOA:
            return new AlgorithmSFMT2281_MOA_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_4253_MOA:
            return new AlgorithmSFMT4253_MOA_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_11213_MOA:
            return new AlgorithmSFMT11213_MOA_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_19937_MOA:
            return new AlgorithmSFMT19937_MOA_C(seed);
        case ERA_SIMD_FAST_MERSENNE_TWISTER_44497_MOA:
            return new AlgorithmSFMT44497_MOA_C(seed);
        default:
            return 0;
    }
}

_MYTH_RANDOM_API_ Stream::Input* _MYTH_CALL_CONV_ create_input_random(E_RANDOM_ALGORITHM algo, int32_t seed, const std::string& name)
{
   //
}

} // namespace Random
} // namespace Myth
